# 任务1：比亚迪股票数据读取与描述性分析（修复plt未定义错误）
import pandas as pd
import matplotlib.pyplot as plt  # 关键：先导入plt，再使用rcParams
import warnings

warnings.filterwarnings('ignore')  # 忽略警告
# 解决中文显示（必须在导入plt后设置）
plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']  # 兼容Windows/Linux
plt.rcParams['axes.unicode_minus'] = False


def task1_excel_analysis():
    # 1. 配置Excel文件路径（请替换为你的本地文件路径）
    excel_path = "比亚迪后复权历史行情数据.xlsx"  # 同目录用文件名，否则写完整路径（如"C:/XXX/XXX.xlsx"）

    try:
        # 2. 读取Excel文件（指定Sheet2，处理日期格式）
        df = pd.read_excel(
            io=excel_path,
            sheet_name="Sheet2",  # 文档明确数据在Sheet2
            engine="openpyxl",  # 读取.xlsx必需引擎
            dtype={"日期": str}  # 先按字符串读日期，避免自动转换错误
        )

        # 3. 数据有效性校验
        if df.empty:
            raise ValueError("Excel文件Sheet2无数据，请检查文件内容")
        required_cols = ['日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
        missing_cols = [col for col in required_cols if col not in df.columns]
        if missing_cols:
            raise ValueError(f"缺少必要列：{missing_cols}，请确认数据格式")

        # 4. 日期格式转换（关键：用于时间序列分析）
        df['日期'] = pd.to_datetime(df['日期'], format='%Y-%m-%d', errors='coerce')
        df = df.dropna(subset=['日期']).reset_index(drop=True)  # 移除日期无效的行

        # 5. 输出数据基本信息
        print("=" * 60)
        print("任务1：Excel数据读取与描述性分析结果")
        print("=" * 60)
        print(f"✅ Excel文件读取成功！")
        print(f"   - 文件路径：{excel_path}")
        print(f"   - 数据规模：{df.shape[0]}行（交易日）× {df.shape[1]}列（指标）")
        print(f"   - 时间范围：{df['日期'].min().strftime('%Y-%m-%d')} 至 {df['日期'].max().strftime('%Y-%m-%d')}")

        print("\n📊 数据前5行：")
        print(df.head().round(2))  # 保留2位小数，便于阅读

        print("\n📋 数据类型：")
        print(df.dtypes)

        # 6. 定量变量描述性分析
        quant_vars = ['开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
        desc_stats = df[quant_vars].describe()

        print("\n📈 定量变量描述性统计（保留2位小数）：")
        print(desc_stats.round(2))

        # 7. 核心结论提炼
        print("\n🎯 核心数据结论：")
        print(f"   - 收盘价：均值{df['收盘'].mean():.2f}元 | 最高{df['收盘'].max():.2f}元 | 最低{df['收盘'].min():.2f}元")
        print(f"   - 成交量：日均{df['成交量'].mean():.0f}手 | 最大{df['成交量'].max():.0f}手 | 最小{df['成交量'].min():.0f}手")
        print(f"   - 涨跌幅：日均{df['涨跌幅'].mean():.2f}% | 最大涨幅{df['涨跌幅'].max():.2f}% | 最大跌幅{df['涨跌幅'].min():.2f}%")

    except FileNotFoundError:
        print(f"❌ 错误：未找到Excel文件！当前路径：{excel_path}，请检查路径是否正确")
    except ValueError as e:
        print(f"❌ 数据错误：{str(e)}")
    except Exception as e:
        print(f"❌ 读取失败：{str(e)}，请安装openpyxl库（命令：pip install openpyxl）")


# 执行任务1
if __name__ == "__main__":
    task1_excel_analysis()